package br.org.isvi.interpretador.portugol;

import br.org.isvi.interpretador.portugol.types.BooleanSymbol;
import br.org.isvi.interpretador.portugol.types.IntegerSymbol;
import br.org.isvi.interpretador.portugol.types.RealSymbol;
import br.org.isvi.interpretador.portugol.types.StringSymbol;
import br.org.isvi.interpretador.portugol.types.Symbol;
import br.org.isvi.interpretador.portugol.types.Variable;
import br.org.isvi.interpretador.portugol.types.VariableType;

public class SymbolsFactory {
	
	public static Variable createVariable(String name, VariableType type) {
		return new Variable(type, name);
	}
	
	public static Symbol createNumberSymbol(String value) {
		Symbol symb = new IntegerSymbol(Integer.valueOf(0));
		
		if(value.contains(",")) {
			symb = new RealSymbol(Double.parseDouble(value.replace(',', '.')));
		} else {
			symb = new IntegerSymbol(Integer.parseInt(value));
		}
		return symb;
	}
	
	public static Symbol createStringSymbol(String value) {
		String str = value.substring(1, value.length()-1);
		
		return new StringSymbol(StringSymbol.replaceSpecialChars(str));
	}
	
	
	public static Symbol createBooleanSymbol(String value) {
		
		return BooleanSymbol.valueOf(value);
	}
}
